#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
// #define ONLINE_JUDGE
const int N = 11;

int f[N][10]; // 从i个数里最高位是j的Windy数个数

void init()
{
    for(int i = 0; i <= 9; i++) f[1][i] = 1;

    for(int i = 2; i < N; i++) // 不考虑0，1已经处理过，从两位数开始看
        for(int j = 0; j <= 9; j++) // 枚举最高位是j
            for(int k = 0; k <= 9; k++) // 枚举最高位的前一位是k
                if(abs(j - k) >= 2) f[i][j] += f[i-1][k];

}

int dp(int n)
{
    if(!n) return 0; // 如果上界是0，则就是0种

    vector<int> nums; // n在B进制下的每一位
    while(n) nums.push_back(n % 10), n /= 10;

    int res = 0; // 最终返回答案，[0, n]中有多少合法数

    int last = -2; // 首位不能是0，1~9都与-1的差>=2

    for(int i = nums.size() - 1; i >= 0; i--)
    {
        int x = nums[i];

        for(int j =  i == nums.size() - 1; j < x; j++) // 枚举左边分支，即当前位存j
            if(abs(j - last) >= 2) // 判断是否为Windy数
                res += f[i+1][j]; // i到0有(i+1)位

            if(abs(x - last) >= 2) last = x;// 判断是否存在后续分支
            else break; // 不存在后续分支，后续结果不合法

            if(!i) res++; // i == 0 即个位数下本身是1个Windy数
        
    }

    // 特殊处理有前导零
    for(int i = 1; i < nums.size(); i++) // 枚举当前Windy数个数
        for(int j = 1; j <= 9; j++) // 枚举最高位是j
            res += f[i][j];

    return res; 
}

signed main() 
{

    #ifdef ONLINE_JUDGE

    #else
    freopen("./in.txt","r",stdin);
    #endif
    ios::sync_with_stdio(false);
	cin.tie(0);

    init();

    int l, r;
    cin >> l >> r;
    cout << dp(r) - dp(l-1) << endl;
    return 0;
}

